TCP/IP 協定與 Internet 網路:第六章 IP Routing 協定 上一頁 下一頁
6-9 RIP 路徑協定
『路徑訊息協定』(Routing Information Protocol, RIP)(RFC 1058)是由 Xerox 公司的 Palo Alto Research Center(PARC)所發展出來,目前是 Unix 電腦上的共通路徑選擇協定,可執行 routed 或 gated 命令來啟動 RIP 程式。 RIP採用『距離向量路徑選擇法』(Distance –Vector Routing),首先路由器(內部閘門)紀錄每個進入封包的來源位址和計算其所經過路徑的數目(hop)(可由 IP 封包之 TTL 欄位數值計算出),在每一段時間(一般設定 30 秒)內廣播給相鄰的路由器。每一個路由器從自己所計算的訊息和其他路由器所傳遞過來的訊息之中計算出最佳路徑(請參閱 6-4 節之演算法),再更新路由表。目前 RIP 協定在 Internet 網路上應用有兩種版本規格:RIP 和 RIP 2,以下分別介紹其訊息格式及運作方式。
6-9-1 RIP 與 RIP 2 訊息格式
RIP 訊息是以 UDP 協定(埠口 520)包裝,也是透過 IP 協定傳送,圖 6-21 為 RIP、UDP 和 IP 封裝格式。
圖 6-21 RIP 訊息封裝
(A) RIP 訊息格式
圖 6-22 為 RIP 封包格式,各欄位功能如下:
圖 6-22 RIP 封包格式
● 命令(Command, COM):表示此封包的命令是要求訊息(Request)(COM = 1)或回應訊息(Reply)(COM = 2),另外兩個沒有正式說明文件的命令:poll(COM = 5)和 poll-reply(COM = 6),作為要求或回應全部或部份路由表使用。其它命令(COM = 3 ~ 4)都未使用。
● 版本(Version, Ver):表示此封包的版本(Ver = 1)。
● 位址家族標示(Address family Identifier, AFI):在 RIP 協定中允許不同網路之間的訊息傳遞,AFI 表示所傳遞訊息之網路型態或位址格式。如果 AFI = 2 表示 IP 位址格式。
● 位址(Address, Addr):訊息之位址,IP 位址表示之。
● 路由值(Metric):到達位址欄位內之 IP 位址所必須經過的跳躍次數(hop count)。最高值為 15,如果超過 15(16)表示不可到達。Matric 的計算方式如圖 6-23,每經過一個路由器就增加一,譬如路由器 1 和 3 之間的 Metric 為 2。
圖 6-23 路徑訊息之 Metric 計算方式
在一個 RIP 封包內最多可增列 25 筆路徑訊息,每一筆訊息的長度為 20 Bytes,因此 RIP 訊息最長為 504(20 × 25 + 4) Bytes,還不超過 UDP 封包最長 512 Bytes 限制,在一般環境下都可順利傳輸(MTU 限制)。其實 RIP 封包內設計每筆訊息可存放 14 位元組長的位址,但使用 IP 位址格式只用到 4 個位元組,其餘都設為 0。
(B) RIP 2 訊息格式
圖 6-24 為 RIP 2 封包格式,由圖中我們可發現 RIP 2 充分利用 RIP 的位址的空白欄位,填入更多的訊息。以下介紹所增加的3 個訊息欄位:
● 路由網域(Routing Domain):提供路由程式的辨識記號,也就是執行該程式的程序識別碼(Process ID)。
● 路由標籤(Route Tag, RT):提供一個方法來區分內部閘門和外部閘門之間的路徑訊息。
● 次網路遮罩(Subnet Mask, SM):提供該筆訊息的次網路遮罩,如都為 0 表示沒有提供 SM 資料。
● 下一路徑(Next Hop, NH):到達該筆訊息之位址的下一路徑。
圖 6-24 RIP 2 封包格式
6-9-2 RIP 運作程序
RIP 協定是使用路由器上眾所皆知(Well-Know)的 UDP 埠口 520,它運作程序如下:
1. 初始化:當 RIP 啟動時,便偵測所有運作的介面,並針對每一介面送出請求的封包(RIP Request)(或廣播方式),詢問其它路由器的路由表。對方路由器的埠口也是 UDP 520,而該 RIP Request 的 AFI = 0、Addr = 自己的 IP 位址、Metric = 16。
2. 收到請求:路由器收到 RIP Request,即將本身的路由表以 RIP Response 回應給詢問者。另一種情況,如果 RIP Request 內所紀錄的路徑訊息,本身路由表內無資料,表示可能無法到達,便將該路徑的 Metric 設定為 16(表示無窮大的值),也一起回應給詢問端。
3. 收到回應:詢問端收到 RIP Response,就利用 RIP Response 上所登錄的路徑訊息,來更改本身路由表。新的紀錄可以被加入,已存在的紀錄可以被更改或刪除。
4. 定期更新路由表:一般系統都設定每 30 秒,路由器會將本身路由表得全部或部份,廣播給相鄰的路由器,以更新路由資訊。
5. 被動更新:當路由器發現本身和相鄰之間的跳躍數有變更時,隨時發送更新資訊給其它相鄰之路由器,但只發送變更部份。
如果路由器發現它相鄰的路由器已超過三分鐘沒有發送訊息,則將前往該路由器的跳躍值更改為 16,以隔離往該路由器之路徑。又針對 RIP 有一些缺點,RIP 2 將其改進如下:
● 為了減少廣播 RIP 封包的數量,儘可能減少自治系統(AS)之間的 RIP 訊息流通,因此在 RIP 2 的路徑訊息內有一個 RT(Route Tag)以區分不同自治系統,如果路由器收到的路徑訊息是不屬於本身自治系統,便可將其拋棄。
● 一般路徑資訊上的 IP 位址都以網路位址來表示,但也有可能以路由器本身的 IP 位址,如此便很難區分網路位址範圍,尤其是在有子網路分割的環境裡,因此 RIP 2 增加『次網路遮罩』(Subnet Mask, SM),以提供網路號碼的識別。
● RIP 雖然提供路由器之間交換路由表,但沒有提供最佳路徑選擇,RIP 2 的每一筆路徑訊息裡,也提供下一路徑(Next Hop, NH)訊息,以提供最佳路徑給其它路由器參考。
6-9-3 RIP 運作範例
我們用圖 6-25 來說明 RIP 協定的運作程序,也讓我們對 DV Routing 演譯法有更進一步的認識。假設圖中各路由器的路由表皆為起始狀態(未和其它路由器交換任何訊息),其中 Dest. 欄位表示目的網路(Destination)、Next H 欄位為下一路徑(Next-Hop)的路由器、Metric 為向量值(跳躍數量)、D(Direct)表示直接到達網路。假設訊息傳遞方式為 R1 到 R2、再到 R3、再到 R4,依此方向來看各路由表變化情形(當然,實際在運作的網路會雙方向廣播)。
圖 6-25 RIP 運作範例
○ R1 廣播路由表給 R2:R1 廣播路由表給 R2 後,R2 建立新的路由表,如圖 6-26 所示。
圖 6-26 R1 廣播路由表給 R2
○ R2 廣播路由表給 R3:R2 廣播新的路由表給 R3 後,R3 建立新的路由表,如圖 6-27 所示。
圖 6-27 R2 廣播路由表給 R3
○ R3 廣播路由表給 R4:R3 廣播新的路由表給 R4 後,R4 建立新的路由表,如圖 6-28 所示。
圖 6-28 R3 廣播路由表給 R4
RIP 協定的最大限制就是跳躍距離最大 15 個區段,目前網路中自治系統環境也愈來愈大,在一個自治系統之路由器也許會超過這個數目。又因採用距離向量法可能會發生訊息過慢收斂問題,也就是說當網路變更或故障時,無法在快速的時間內傳遞及更新所有路由器上的路由表,造成封包回繞或到達不了目的地。解決方法有水平分割法、以毒攻毒法等等(請參閱 6-4-2 節)。